package com.it.a02jdk8datedemo;

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class A02_InstantDemo {

    public static void main(String[] args) {
        /*
            static Instant now()                    获取当前时间的Instant对象（标准时间）
            static Instant ofXxxx(long epochMilli)  根据（秒/毫秒/纳秒）获取Instant对象
            ZonedDateTime atZone(ZoneId zone)       指定时区
            boolean isXxxx(Instant otherInstant)    判断系统的方法
            Instant minusXxx(long millisToSubtract) 减少时间系统的方法
            Instant plusXxx(long millisToSubtrat)   增加时间系统的方法
         */

        //1.获取当前时间的Instant对象（标准时间）
        Instant now = Instant.now();
        System.out.println(now);//2025-03-01T06:26:42.465278100Z

        //2.根据（秒/毫秒/纳秒）获取Instant对象
        Instant instant1 = Instant.ofEpochMilli(0L);
        System.out.println(instant1);//1970-01-01T00:00:00Z起始时间

        Instant instant2 = Instant.ofEpochSecond(1L);//1L 表示的是一个 长整型的数字1。
        System.out.println(instant2);//1970-01-01T00:00:01Z

        Instant instant3 = Instant.ofEpochSecond(1L, 1000000000L);
        System.out.println(instant3);//1970-01-01T00:00:02Z

        //3.指定时区
        //用Instant.now()获取当前时间对象，再用事件对象调用atZone方法，因为atZone方法不是静态的，我们只能用对象去调用
        //上面的两个方法是静态的，所以我们要用类名去调用。atZone括号里面参数类型不是字符串，是ZoneId,
        //所以我们要用ZoneId调用of方法将时区放入
        ZonedDateTime time = Instant.now().atZone(ZoneId.of("Europe/Paris"));
        System.out.println(time);//2025-03-01T07:37:05.828277500+01:00[Europe/Paris]


        //4.isXxx 判断
        Instant instant4 = Instant.ofEpochMilli(0L);
        Instant instant5 = Instant.ofEpochMilli(1000L);

        //5.用于时间的判断
        //isBefore:判断调用者代表的时间是否在参数表示的时间的前面
        boolean result1 = instant4.isBefore(instant5);
        System.out.println(result1);//true

        //isAften:判断调用者代表的时间是否在参数表示的时间的后面
        boolean result2 = instant4.isAfter(instant5);
        System.out.println(result2);//false

        //6.Instant minusXxx(long millisToSubtract) 减少时间系列的方法
        Instant instant6 = Instant.ofEpochMilli(3000L);
        System.out.println(instant6);//1970-01-01T00:00:03Z

        Instant instant7 = instant6.minusSeconds(1);
        System.out.println(instant7);//1970-01-01T00:00:02Z
    }
}
